<!-- 门禁 》 门禁管理 -->

<template>
  <CommonBody v-bind="bodyProps" @change="toChange">
    <template #search>
      <MySearch />
    </template>

    <template #table>
      <MyTable v-if="param.tab === DICT.TAB[0][0]" />

      <div v-show="param.tab === DICT.TAB[1][0]" class="flex1 full">
        <div v-if="map_info.id">
          <MapView />
        </div>

        <MapEmpty v-else />
      </div>
    </template>

    <MyModal />
  </CommonBody>
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import mixMap from '@admin/views/Secure/mixMap'
import store from '@admin/views/Secure/Access/AccessList/store'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'AccessManage',

  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [mixMap('2', store)],

  /**
   * 组件导入 (Abc.vue + Abc/index.vue)
   */
  ...CORE.components(require.context('@admin/views/Secure/Access/AccessList', true, /vue$/)),

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 主体属性
     */
    bodyProps() {
      return {
        hasRegion: true,
        param: this.map_infoParam,
        bind: 'areaId',
        hasReset: this.param.tab === this.DICT.TAB[0][0],
        flex: true,
      }
    },

    /**
     * 首个区域 ID
     */
    firstId() {
      return (CORE.REGION.DICT[0] || {})[1]
    },
  },

  /**
   * 监听属性 (深度 deep 首次 immediate)
   */
  watch: {
    /**
     * 监听页签切换
     */
    'param.tab'(tab) {
      const { DICT: { TAB }, map_infoParam, firstId } = this
      if (tab === TAB[1][0] && !map_infoParam.areaId) {
        map_infoParam.areaId = firstId
        this.toChange()
      }
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击切换
     */
    toChange() {
      // 查询地图
      this.map_setOne()
      this.map_setList()
      this.map_startInfo()

      // 查询列表
      this.param.regionId = this.param.areaId = this.map_infoParam.areaId
      this.startList(1)
    },
  },
}
</script>
